/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sisvoto.controlador;

import SecuGen.FDxSDK.jni.FDxDeviceInfoParam;
import SecuGen.FDxSDK.jni.FDxDeviceName;
import SecuGen.FDxSDK.jni.FDxError;
import SecuGen.FDxSDK.jni.FDxPortAddr;
import SecuGen.FDxSDK.jni.FDxSecurityLevel;
import SecuGen.FDxSDK.jni.JFPLib;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.ArrayList;
import sisvoto.Utiles.Mensajes;
import sisvoto.modelo.Elector;
import sisvoto.modelo.HuellaDactilar;
import sisvoto.vista.AutenticacionElector;
import sisvoto.vista.IngresoSistema;
import sisvoto.vista.Papeleta;

/**
 *
 * @author Dianita
 */
public class ValidacionFinger extends Thread {

    ArrayList<HuellaDactilar> huellas;
    byte[] huellabase = new byte[400];
    byte[] huellacapturada = new byte[400];
    JFPLib jlf = null;
    private long ret;
    private FDxDeviceInfoParam deviceInfo = new FDxDeviceInfoParam();
    private long devicePort;
    AutenticacionElector ae = null;
    Elector elector;

    public ValidacionFinger(ArrayList<HuellaDactilar> huellas, JFPLib jlf, AutenticacionElector ae, Elector elector) {
        this.huellas = huellas;
        this.jlf = jlf;
        this.ae = ae;
        this.elector = elector;
    }

    @Override
    public void run() {
        conexionauxfinger();
        new Mensajes().StandarTick(ae, "           Ingrese Su Huella Dactilar del " + (huellas.get(0).getDedo()).toUpperCase() + ". \n Si está Listo. Presione el Boton Aceptar de Éste Mensaje. \n NOTA: Su Huella Dactilar Debe Estar Libre de Impuresas ");
        for (int i = 0; i < 4; i++) {
            if (i > 0) {
                BufferedImage img1gray = new BufferedImage(260, 300, BufferedImage.TYPE_BYTE_GRAY);
                byte[] imageBuffer1 = ((java.awt.image.DataBufferByte) img1gray.getRaster().getDataBuffer()).getData();
                if (jlf != null) {
                    ret = jlf.getImage(imageBuffer1);
                    if (ret == FDxError.ERROR_NONE) {
                        jlf.getMinutiae(imageBuffer1, huellacapturada);
                        huellabase = huellas.get(0).getHuella();
                        if (FDxError.ERROR_NONE == jlf.matchForVerification(huellabase, huellacapturada, FDxSecurityLevel.L5_NORMAL)) {
                            new Mensajes().StandarTick(ae, "Identidad Autenticada");
                            ae.dispose();
                            Papeleta p;
                            try {
                                p = new Papeleta(null, true,elector);
                                p.setLocationRelativeTo(null);
                                p.setVisible(true);
                                return;
                            } catch (IOException ex) {
                            }
                        } else {
                            if (i != 3) {
                                new Mensajes().StandarWarning(ae, "                                INTENTE NUEVAMENTE \n \n         Ingrese Su Huella Dactilar del " + (huellas.get(0).getDedo()).toUpperCase() );
                            }
                        }
                    }
                }
            }
            try {
                sleep(4000);
            } catch (InterruptedException ex) {
            }
        }

        new Mensajes().StandarWarning(ae, "       Ingrese Su Huella Dactilar del " + (huellas.get(1).getDedo()).toUpperCase() + ". \n Si está Listo. Presione el Boton Aceptar de Éste Mensaje. \n NOTA: Su Huella Dactilar Debe Estar Libre de Impuresas ");
        for (int j = 0; j < 4; j++) {
            if (j > 0) {
                BufferedImage img1gray = new BufferedImage(260, 300, BufferedImage.TYPE_BYTE_GRAY);
                byte[] imageBuffer1 = ((java.awt.image.DataBufferByte) img1gray.getRaster().getDataBuffer()).getData();
                if (jlf != null) {
                    ret = jlf.getImage(imageBuffer1);
                    if (ret == FDxError.ERROR_NONE) {
                        jlf.getMinutiae(imageBuffer1, huellacapturada);
                        huellabase = huellas.get(1).getHuella();
                        if (FDxError.ERROR_NONE == jlf.matchForVerification(huellabase, huellacapturada, FDxSecurityLevel.L5_NORMAL)) {
                            new Mensajes().StandarTick(ae, "Identidad Autenticada");
                            ae.dispose();
                            Papeleta p;
                            try {
                                p = new Papeleta(null, true, elector);
                                p.setLocationRelativeTo(null);
                                p.setVisible(true);
                                return;
                            } catch (IOException ex) {
                            }
                        } else {
                            if (j != 3) {
                                new Mensajes().StandarWarning(ae, "                                  INTENTE NUEVAMENTE \n \n          Ingrese Su Huella Dactilar del " + (huellas.get(1).getDedo()).toUpperCase() );
                            }
                        }
                    }
                }
            }
            try {
                sleep(4000);
            } catch (InterruptedException ex) {
            }
        }
        String codigodact = new Mensajes().ImputextDialogo(ae, "                   Ingrese el Código de Identidad Dactilar. \n Éste Código Se Encuentra Disponible en su Cédula de Ciudadanía.");
        if (elector.getIdentidadDactilar().equals(codigodact)) {
            ae.dispose();
            Papeleta p;
            try {
                p = new Papeleta(null, true,elector);
                p.setLocationRelativeTo(null);
                p.setVisible(true);
                return;
            } catch (IOException ex) {
            }
        } else {
            new Mensajes().StandarWarning(ae, "No Se Pudo Autenticar Su Identidad. \n    Consulte con el Administrador");
            ae.dispose();
            IngresoSistema i = new IngresoSistema(null, true);
            i.setLocationRelativeTo(null);
            i.setVisible(true);
        }
    }

    private void conexionauxfinger() {
        jlf = new JFPLib(FDxDeviceName.CN_FDU02);
        devicePort = FDxPortAddr.AUTO_DETECT;
        ret = jlf.openDevice(devicePort);
        ret = jlf.getDeviceInfo(deviceInfo);
    }
}
